#!/bin/bash

# 配置项（仅保留必要参数）
CACHE_DIR="${HOME}/.cache/chillhop-player"
FFPLAY_PATH="ffplay"
STREAM_BASE_URL="https://stream.chillhop.com/mp3/"
DMENU_ARGS="-i -c"  # 仅保留：-i（不区分大小写）、-c（居中显示）

# 去除字符串首尾空格（纯bash实现）
trim() {
    local var="$*"
    var="${var#"${var%%[![:space:]]*}"}"  # 去开头空格
    var="${var%"${var##*[![:space:]]}"}"  # 去结尾空格
    echo "$var"
}

# 解析曲目（处理特殊字符）
parse_tracks() {
    local line id name
    while IFS= read -r line; do
        [ -z "$line" ] && continue  # 跳过空行
        if [[ "$line" =~ ^([^!]+)!(.+)$ ]]; then
            id_raw="${BASH_REMATCH[1]}"
            name_raw="${BASH_REMATCH[2]}"
            id=$(trim "$id_raw")
            name=$(trim "$name_raw")
            # 转义单引号（避免解析错误）
            name_escaped="${name//\'/\'\\\'\'}"
            id_escaped="${id//\'/\'\\\'\'}"
            echo "${name_escaped}|${id_escaped}"
        fi
    done < "chillhop.txt"
}

# 主逻辑
main() {
    mkdir -p "${CACHE_DIR}"

    # 解析曲目列表
    local tracks=$(parse_tracks)
    if [ -z "$tracks" ]; then
        echo "错误：chillhop.txt 中无有效曲目（格式应为 'ID!名称'）"
        exit 1
    fi

    # 提取名称列给dmenu
    local menu_items=$(printf "%s\n" "$tracks" | cut -d'|' -f1)

    # 用dmenu选择曲目（仅用 -i -c 参数）
    local selected=$(printf "%s\n" "$tracks" | dmenu $DMENU_ARGS | head -n1)
    [ -z "$selected" ] && { echo "用户取消选择"; exit 0; }

    # 提取名称和ID（反转义单引号）
    local name=$(echo "$selected" | cut -d'|' -f1 | sed "s/'\\\'\"'/'/g")
    local id=$(echo "$selected" | cut -d'|' -f2 | sed "s/'\\\'\"'/'/g")
    local cache_file="${CACHE_DIR}/${id}.mp3"

    # 系统通知
    notify() {
        command -v "notify-send" &> /dev/null && notify-send "Chillhop" "$1"
    }

    # 下载或使用缓存
    if [ ! -f "${cache_file}" ]; then
        notify "正在下载：${name}"
        echo "下载中：${name}"
        if ! curl -sSL "${STREAM_BASE_URL}${id}" -o "${cache_file}"; then
            notify "下载失败：${name}"
            echo "下载失败"
            rm -f "${cache_file}"
            exit 1
        fi
        notify "下载完成：${name}"
    else
        echo "使用缓存：${cache_file}"
    fi

    # 播放
    notify "开始播放：${name}"
    echo "正在播放：${name}（按 q 退出）"
    ${FFPLAY_PATH} -nodisp -autoexit "${cache_file}"
    notify "播放结束：${name}"
}

main
